草庐IT

C++ std::unordered_map 复杂度

全部标签

c++ - 实现 Halstead 复杂性指标的问题

我目前正在练习一个简单的程序,以理解从Halstead的软件科学中推导出各种指标所涉及的方程式。我确实相信我做的是正确的,但我觉得我还没有注册所有的操作数和运算符,这样我就可以从数学开始了。我正在使用的程序是:/*01*///countshowmanyitemsinsArray[]arealsointArray[]/*02*/intmatched(intsArray[],inttArray[],intsMax,inttMax)/*03*/{/*04*/intcount,i,first,middle,last;/*05*//*06*/for(i=0;i我已经出来了n1=不同运算符的数量=

c++ - 为什么不能将 mem_fn 应用于 std::string 的成员函数?

structint_holder{intvalue;inttriple(){returnvalue*3;}};intmain(intargc,constchar*argv[]){std::stringabc{"abc"};int_holderone{1};autof1=mem_fn(&std::string::clear);autof2=mem_fn(&int_holder::triple);f1(abc);f2(one);}我在Xcode中测试这样的代码,编译器发出这样的错误似乎mem_fn可以用于用户定义类的成员函数,但不能用于标准字符串的成员函数,有什么不同,为什么?感谢您的阅读

C++11:std::mem_fn 的类型名称

auto很好,但我需要在类中声明一个成员,而不是堆栈中的变量。decltype有效,但不知何故看起来很奇怪classAutomation{void_init_state(int);decltype(std::mem_fn(&Automation::_init_state))next_state;};std::function似乎也可以,但与纯成员函数有细微差别classAutomation{void_init_state(int){}public:decltype(std::mem_fn(&Automation::_init_state))next_state;std::functio

c++ - 创建一个函数,检查数组是否具有两个相反的元素,复杂度小于 n^2。 (C++)

创建一个函数来检查一个数组是否有两个相反的元素,复杂度小于n^2。让我们使用数字。显然最简单的方法是:boolopposite(int*arr,intn)//n-arraylength{for(inti=0;i请问各位有没有想出一个复杂度小于n^2的算法。我的第一个想法如下:1)排序数组(最坏情况复杂度算法:n.log(n))2)创建两个新数组,填充原始数组中的负数和正数(到目前为止我们有->n.log(n)+n+n=n.log(n))3)...以某种方式比较两个新数组以确定它们是否具有相反的数字我不太确定我的想法是否正确,但我愿意接受建议。 最佳答案

c++ - Clang 不能与 std::experimental::optional 一起正常工作

clang似乎不能与std::experimental::optional一起正常工作。考虑以下示例:#include#includestructFoo{intbar;};intmain(){Foofoo;std::experimental::optionalopt=foo;opt.value().bar=42;std::cout它在g++5.3.1版中编译良好,但在clang7.0.0版和clang7.0.2版中均无法编译。返回的错误是:Undefinedsymbolsforarchitecturex86_64:"std::experimental::bad_optional_acc

c++ - `std::shared_ptr` 的智能指针模拟,带有用于将回调绑定(bind)到引用计数修改事件的 API,例如释放/保留……这是一回事吗?

我需要一个智能指针结构-类似于std::shared_ptr-它为我提供了某种带有公开Hook的API,回调到引用计数修改事件(例如释放/保留,又名refcout增量/减量)可以绑定(bind)。我要么想自己实现,要么使用现成的东西,如果它存在的话。比如,我希望在定义这个假定的shared_ptr-ish智能指针(就像delete-expressions和deleterfunctor分别在shared_ptr和unique_ptr定义中使用。编辑(来self下面的评论)——这就是我想要这个的原因:我目前有一个Image类模板,在它的核心,有一个std::shared_ptr持有一个(可

c++ - GCC 与 VS2013 中 std::setprecision(0) 的正确行为

根据我使用的编译器,我在n=0时得到这个函数的不同输出。std::stringToStrWPrec(doublea_value,constintn){std::ostringstreamout;out(GCC)4.8.320140911(RedHat4.8.3-9)为ToStrWPrec(1.2345678,0)返回1。对于相同的代码,VS2013返回1.2346。我的问题是:setprecision的正确/标准行为是什么?什么是使用setprecision的好替代方法?这是根据下面的评论更新的代码std::stringToStrWPrec(doublea_value,constint

c++ - C4244 : '+=' : conversion from 'std::streamsize' to 'size_t' , 可能丢失数据

我已将我的VC++项目从VS2008迁移到VS2013并收到一些警告,例如:C4244:'+=':conversionfrom'std::streamsize'to'size_t',possiblelossofdata.如何解决这些类型的警告? 最佳答案 在MSVC2013中std::streamsize是:typedef_Longlongstreamsize;typedef_LONGLONG_Longlong;#define_LONGLONG__int64size_t是:typedefunsigned__int64size_t;因

c++ - 通过外部信号停止 std::thread 的有效方法是什么?

这是一段无法按设计工作的代码,请向我解释这里出了什么问题(简化代码以使其更具可读性)。shm_serverserver;std::threads{server};//somework...std::cout看起来我为shm_server类的另一个拷贝调用了一个stop方法。因为stop()仅将std::atomic_booldone;(shm_server成员)设置为true但我看到了线程函数(这是shm_server的operator())仍然看到done等于false。std::thread只有移动构造函数?在这种典型情况下,如何正确地向服务器发送信号?classshm_serve

c++ - std::function 的 operator== 的真正目的是什么?

我不止一次看到std::function的operator==被误用,我不得不解释它的真正用途是什么。为了有利于future读者的清晰起见,here是文档。上面提到的文档说:Comparesa std::function withanullpointer.Emptyfunctions(thatis,functionswithoutacallabletarget)compareequal,non-emptyfunctionscomparenon-equal.也就是说,std::function也有operatorbool()(here是文档),其行为方式几乎相同并且可以使用代替比较my_